package com.example.rabbitmq.ksdemo.callback;

import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.DefaultConsumer;
import com.rabbitmq.client.Envelope;

import java.io.IOException;

public class MyConsumer extends DefaultConsumer {

    private CallBack callBack;

    public MyConsumer(Channel channel,CallBack callBack) {
        super(channel);
        this.callBack=callBack;
    }

     // 获取消息，并且处理，这个方法类似事件监听，如果有消息的时候，会被自动调用
    @Override
    public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties,
                               byte[] body) throws IOException {
        try {
            // body 即消息体
            String msg = new String(body,"UTF-8");
//                    System.out.println(1/0); // 模拟异常  表示消息未正常处理    网络波动。。
            System.out.println(" [x] received : " + msg + "!"+"  envelope.getDeliveryTag()"+envelope.getDeliveryTag());
            callBack.ReceiveData(msg);
            //   false   不按照批量删除 来清理队列信息     true  按照批量删除
        } catch (Exception e){
            e.printStackTrace();  //  第三个参数  false  直接删除消息   true
        }finally {
            this.getChannel().basicAck(envelope.getDeliveryTag(),false);
        }
    }
}
